home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <fcntl.h>
- #include "crtlocal.h"
-
- typedef struct
- {
- long readptr,writeptr;
- char buffer[8192];
- } pipe_struct;
-
- long readpipe(int fd, char *readbuffer, long size)
- {
- long actual = 0;
- pipe_struct *buf = (pipe_struct *)crt_fd_tab[fd].fd;
- while (size-- && (buf->writeptr != buf->readptr))
- {
- *readbuffer++ = buf->buffer[buf->readptr];
- buf->readptr = (buf->readptr+1)&8191;
- ++actual;
- }
- return actual;
- }
-
- long writepipe(int fd, char *writebuffer, long size)
- {
- long actual = 0;
- pipe_struct *buf = (pipe_struct *)crt_fd_tab[fd].fd;
- while (size-- && (buf->writeptr != (buf->readptr-1)&8191))
- {
- buf->buffer[buf->writeptr] = *writebuffer++;
- buf->writeptr = (buf->writeptr+1)&8191;
- ++actual;
- }
- return actual;
- }
-
- int pipe(int *fd)
- {
- fd[0] = fd[1] = next_fd(3);
- crt_fd_tab[*fd].fd = (long)xmalloc(sizeof(pipe_struct));
- crt_fd_tab[*fd].flags = O_PIPE;
- return 0;
- }
-